/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ejercicio.practica3;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/**
 *
 * @author manolo
 */
public class tablaCPU {

    public static void main(String[] args) throws InterruptedException {
        int n, k;
        Scanner teclado = new Scanner(System.in);
        Date d = new Date();
        DateFormat df = new SimpleDateFormat("HH:mm:ss:SSS"); // formato para las variables de tipo fecha
        long inicCronom, finCronom; // variables del cronometro

        System.out.println("Introduzca el número de elementos del vector: ");
        n = teclado.nextInt();

        EscalaVector vector = new EscalaVector(n);

        System.out.println("Introduzca el factor de escala: ");
        k = teclado.nextInt();

        inicCronom = System.currentTimeMillis(); //se prepara el cronometro
        d.setTime(inicCronom);
        vector.escala(k);
        finCronom = System.currentTimeMillis(); //se para el cronometro
        d.setTime(finCronom);

        System.out.println("Escalado secuencial terminado a las  " + df.format(d) + " tras " + (finCronom - inicCronom) + " milisegundos");

        // Ejecución Paralela
        int nNucleos = Runtime.getRuntime().availableProcessors(); // Número de procesadores
        int limInf = 0;
        int limSup = n / nNucleos;
        int umbral = limSup;
        EscalaVectorParalelo[] vectorHilo = new EscalaVectorParalelo[nNucleos];

        for (int i = 0; i < nNucleos; ++i) {
            vectorHilo[i] = new EscalaVectorParalelo(n, k, limInf, limSup);
            limInf = limSup;
            limSup += umbral;
        }

        inicCronom = System.currentTimeMillis(); //se prepara el cronometro
        d.setTime(inicCronom);
        for (int i = 0; i < nNucleos; ++i) {
            vectorHilo[i].start();
        }

        for (int i = 0; i < nNucleos; ++i) {
            vectorHilo[i].join();
        }
        finCronom = System.currentTimeMillis(); //se para el cronometro
        d.setTime(finCronom);
        System.out.println("Escalado en paralelo terminado a las  " + df.format(d) + " tras " + (finCronom - inicCronom) + " milisegundos");

    }
}
